<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge,chrome=1">
        <title>移除元素</title>
    </head>
    <body>
        <section>
            给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素，并返回移除后数组的新长度。

            不要使用额外的数组空间，你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

            元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
        </section>
        <h1>方法一</h1>
        <pre class="language-JavaScript">
            <code>
                var removeElement = function(nums, val) {
                    let k = 0; // [0, ...k)是不等于val的数
                    for(let i = 0; i < nums.length; i ++) {
                        if(nums[i] !== val) {
                            if(k !== i) {
                                nums[k] = nums[i];
                            }
                            k ++;
                        }
                    }
                    return k;
                };
            </code>
        </pre>
        <h1>方法二</h1>
        <pre class="language-JavaScript">
            <code>
                var removeElement = function(nums, val) {
                    let l = 0, r = nums.length - 1;//[0, ... l)为不为val的元素，(r,...,nums.length - 1]为是val的元素
                    while(l <= r) {
                        if(nums[l] !== val) {
                            l ++;
                        } else if(nums[r] === val) {
                            r --;
                        } else {
                            nums[l] = nums[r];
                            l ++;
                            r --;
                        }
                    }
                    return l;
                };
            </code>
        </pre>
        <script>
            var removeElement = function(nums, val) {
                let k = 0; // [0, ...k)是不等于val的数
                for(let i = 0; i < nums.length; i ++) {
                    if(nums[i] !== val) {
                        if(k !== i) {
                            nums[k] = nums[i];
                        }
                        k ++;
                    }
                }
                return k;
            };
            var removeElement = function(nums, val) {
                let l = 0, r = nums.length - 1;//[0, ... l)为不为val的元素，(r,...,nums.length - 1]为是val的元素
                while(l <= r) {
                    if(nums[l] !== val) {
                        l ++;
                    } else if(nums[r] === val) {
                        r --;
                    } else {
                        nums[l] = nums[r];
                        l ++;
                        r --;
                    }
                }
                return l;
            };
        </script>
    </body>
</html>